﻿using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class SceneFader : MonoBehaviour
{
    public Image image;  // 图片组件，用于实现淡入淡出效果

    public AnimationCurve curve;  // 动画曲线，控制淡入淡出的变化规律

    [HideInInspector]
    public bool doneFading;  // 标志淡入淡出是否完成的变量，不在检视面板显示

    private void Start()
    {
        if (image == null)
            image = GetComponentInChildren<Image>();  // 如果图片组件为空，则获取子对象中的图片组件

        Time.timeScale = 1;  // 设置游戏时间缩放为正常值
        doneFading = false;  // 初始化淡入淡出未完成状态
        StartCoroutine(FadeIn());  // 启动淡入协程
    }

    public void FadeTo(string scene)
    {
        StartCoroutine(FadeOut(scene));  // 启动淡出协程，并指定要加载的场景
    }

    IEnumerator FadeIn()
    {
        float t = 1;  // 初始化淡入的时间参数

        while (t > 0f)
        {
            t -= Time.deltaTime;  // 减少淡入时间
            float a = curve.Evaluate(t);  // 根据曲线计算透明度
            image.color = new Color(0, 0, 0, a);  // 设置图片的颜色，实现淡入效果
            yield return null;  // 等待一帧
        }

        doneFading = true;  // 标志淡入完成
    }

    IEnumerator FadeOut(string scene)
    {
        float t = 0;  // 初始化淡出的时间参数

        while (t < 1f)
        {
            t += Time.deltaTime;  // 增加淡出时间
            float a = curve.Evaluate(t);  // 根据曲线计算透明度
            image.color = new Color(0, 0, 0, a);  // 设置图片的颜色，实现淡出效果
            yield return null;  // 等待一帧
        }

        //淡出完成后加载新场景
        SceneManager.LoadScene(scene);
    }
}
